OnWeight · Build Spec

Screens, states
& system

The single source of truth for what OnWeight is, what's designed, and what's ready for dev. OnWeight is a weight-cut companion for combat athletes: it reads the daily weigh-in trend, projects it to weigh-in day, and gives a plain-language verdict on whether the athlete makes weight safely and on time. One visual direction (Balanced), iPhone, off-white surface. Status (current): every screen and state in this spec is now designed in the prototype — onboarding, the daily log, the full lifecycle, plus empty / error / settings / confirmation states, all seven sports and localization. What remains is engine & back-end integration (live recalculation, persistence, push delivery), not screen design.

01 Navigation & IA

Four tabs, each scoped to the active camp, plus Log as a primary action (a daily act, not a destination).

TabOwns
TodayRenders the current lifecycle state. Hero weight, pace verdict, log action. The screen that changes most.
PlanThe camp: target, timeline, division rules, rehydration, personalisation toggles. Home of plan refinement.
TrendChart, full history, recent log, weekly check-ins, cycle context.
MoreProfile, past camps (archive), settings, learn.
LogPrimary action (not a tab) — opens weight entry from anywhere; deep-links to the result.

02 Camp lifecycle — the state machine

A camp is a bounded effort with a target (division limit) and usually a date (weigh-in). Today re-skins per state. Branches handle the messy reality.

StateTriggerToday leads with
No campOff-season / between fightsMaintenance weight + "Start a camp"awaiting approval
SetupAthlete starts a campOnboarding / new-camp flowawaiting approval
ActivePlan live, > ~1 wk outPace verdict, projection, trend, logawaiting approval
Fight Week≈ T-7Working target + descent protocol + today's jobawaiting approval
Weigh-in DayT-0One job: record the official numberawaiting approval
OutcomeNumber enteredMade → rebuild · Missed → supportawaiting approval
Fight ResultAfter the boutWon / Lost / No contest → archiveawaiting approval
RecoveryPost-fightRehydrate, refeed, reflectawaiting approval
Paused / CancelledFight moved / fell throughStop projecting; keep or archive dataawaiting approval

Happy path: No camp → Setup → Active → Fight Week → Weigh-in → Outcome → Fight → Result → Recovery → Archived. New camp loops back to Setup, pre-filled from history.

03 Screen inventory

Today & daily loop

Dashboard · Today awaiting approval

Hero weight numeral + unit + logged time + tone-coloured pace badge. Add-weight CTA. "How you're tracking" card (diagnosis + human synopsis + divider + Projected / Limit / Hits-limit stats; taps into detail). Weight-trend chart card.

States: 4 pace · log-time placement · button style

Tracking detail awaiting approval

Pushed from the tracking card. Headline diagnosis, 3-part interpretation (fact → why → action), "The projection" + "Your pace" grouped readouts.

States: 4 pace

Add-weight result awaiting approval

Logged confirmation, a calm habit-reward consistency strip (“every morning this week” — rewards showing up, never shames pace), result headline/sub, Weekly + Projected stats with per-number verdicts, "What this means" card, CTA (Back to Today / Review plan).

States: 4 pace

Log-weight entry awaiting approval

Number pad with live input + date row, behind Log. Accepts a typed weight, saves, and deep-links to the result (whose verdict now reflects the logged number).

States: empty · filled · edit date

Plan

Your Camp (Plan) awaiting approval

About-this-camp hero (class limit / your target + divider), competition rules, rehydration rules, personalisation toggles (cycle, gear, rehydration clause, hydration testing).

Plan Preview · Paywall awaiting approval

Onboarding payoff: cut summary, today→fight-weight, "why this works," weekly-adapt, a full-bleed social-proof band (sport stat + a real, attributed fighter quote), and the unlock CTA — a 7-day free trial over a 2–3 plan offer with the annual default pre-selected.

Sharpen your plan awaiting approval

Progressive personalisation via the Refine-plan flow (weigh-in time, cycle, competition rules). Lives in Plan; nudged from Today. Each detail tightens the projection.

Edit plan awaiting approval

Change-plan screens (move division / move date / hold safe) + the granular competition-rules sub-flow (equipment, re-weigh, hydration). Target recompute is engine work.

Trend

Progress · Trend & log awaiting approval

This-camp card (headline + divider + Start / Now / To-go), weight trajectory chart + legend, recent-log list.

Menstrual cycle awaiting approval

Current-phase hero with the expected-water cycle curve + "you're here" marker, cycle setup, expected weight by phase.

Weekly check-in awaiting approval

The "Weeks" view: check-ins x/7, weekly loss %, average. Where the adaptive goal recalculates (recalculation logic is engine work).

Lifecycle & outcomes

Fight Week · Today awaiting approval

Working-target card (division limit / cyclical water / work-to), today's job + progress, the descent protocol (StepList).

Weigh-in Day awaiting approval

Single job: record the official number. Reference stats (this morning / working target / limit).

Made / Missed awaiting approval

One template (OutcomeScreen). Shared hero number + diff line + divider + headline. Made → rebuild plan. Missed → acknowledgement only, no actions.

Fight Result awaiting approval

Won / Lost / No contest selection → closes the camp, feeds the archive.

Onboarding & goal-setting awaiting approval

Opens on the app-open splash + loading (animated — see Launch Splash). Then ~20 frames, mapped from the source flow set: auth → sport → fight date or open-ended rate → biological sex → weigh-in time + reminder → [female] cycle on / period date / length / phase changes → confirm sport rules (equipment, re-weigh, hydration) → current weight → limit (a one-tap division picker — natural class starred, scale target autofilled, keypad fallback) → cut rate → cut strategy → check details → loading → Plan Preview → paywall.

Account, system & edge states awaiting approval

Returning-user auth awaiting approval

Log in, forgot password, reset-link sent, email/2-factor code verify. Account creation lives in onboarding.

First-run / empty states awaiting approval

Today before first log, empty trend, empty past-camps, first-week check-in. Each keeps the real screen's chrome.

Error / system states awaiting approval

Offline (log queued), save failed, sync failed, purchase declined + restore, notifications denied, duplicate-account.

Settings detail awaiting approval

Notifications, Account & units, unit switch (kg↔lb), subscription management, privacy & data + delete, camp↔maintenance transition confirms.

Confirmations & notification awaiting approval

Cancel fight / delete camp / change goal confirms, the iOS permission prompt, and the morning weigh-in push on the lock screen.

Localization awaiting approval

Today rendered across eight locales — including two RTL (Arabic, Hebrew) and CJK (Japanese, Korean) — to prove the layout, fonts and numerals localize per sport-audience.

Account creation & safety awaiting approval

Create account (Apple / Google / email), email verification, the required safety disclaimer (no crash cuts · guidance not medical advice · listen to your body), and the age gate — OnWeight is 18+ only; under-18 is not eligible.

Legal & data rights awaiting approval

In-app Terms of Service and Privacy Policy (incl. a Health & safety clause), plus data-rights controls: export my data, delete account / data.

Cut-strategy info & safety gates awaiting approval

The five ⓘ strategy explainers (Low Fibre · Low Sodium · Sweat Out · Low Carb · Water Load) with dosages + safety ceilings, and the ±20 kg out-of-healthy-range goal gate (with a keep-anyway branch).

Widgets awaiting approval

Home Screen (small + medium) and Lock Screen complications: weight, on-track state, days to weigh-in at a glance. Post-launch retention surface.

Subscription lifecycle awaiting approval

The app is paywalled end-to-end, so the money path is complete: free-trial paywall, trial-running state, plan compare, manage / cancel subscription, payment method, billing history.

Notifications & sync awaiting approval

The full push content set in the coach's voice (copy + triggers + cadence), stacked lock-screen design, Apple Health & smart-scale sync, and reminder-permission priming.

Imperial (lb) parity awaiting approval

Pounds on every weight-bearing screen for the US market. Weights stay stored in kg (projection math untouched) and convert at the edge — Today, Log, divisions, plan.

Detail screens & editors awaiting approval

The drill-ins the rows imply: value editors (name / email / password), time & date pickers, Help & feedback, weigh-in / week / past-camp detail, and the Learn article reader.

Future state · sandbox roadmap

Mapped, not built — roadmap concepts parked in a sandbox and reachable only via the jump menu, never wired into a live screen: tapered plan shape, Learn library (video + articles), Fuel / nutrition, Devices & sync, Coach AI chat, Find-your-fight competition picker, plus the re-engagement set (win-back, smarter next camp, reminder re-ask) and a coach roster view. Deliberately out of Release 1 — see OnWeight - Feature List.html.

Sports coverage awaiting approval

All seven disciplines have rules data, a plan and a coach's read: Boxing, MMA, Muay Thai (free-entry), BJJ (gi + no-gi), Taekwondo, Judo, Wrestling. See OnWeight - Rules Verification.md — all rules are now verified against governing bodies (Taekwondo +5% confirmed vs WT Competition Rules Art. 9 §2.2); the only open items are product decisions (Boxing category names; pro-boxing / World-Championship sets not modelled).

04 Pace & diagnosis system

The engine: smooth the daily weigh-ins (EWMA trend) → project to weigh-in day → classify pace → diagnose. The dashboard leads with a coloured diagnosis + a human synopsis (good / bad and why); the detail carries the full fact → why → action.

StateDiagnosisSynopsisTone
On trackMaking weightSafe, steady; makes weight without draining powergreen
Too fastCutting too fastQuicker than needed; costs strength & recoveryamber
BehindSlightly behindA touch slow, easy fix this weekamber
Off paceOff the paceToo slow to make weight safely; rework the planred

Red is reserved for genuine risk. Diagnosis stays honest but never alarmist ("Off the pace," not "Missing weight"). Each result also tags individual numbers (e.g. "Could be too low," "Not enough loss").

05 Cycle model — adjust the target, not the athlete

Always water / fluid, never body composition. Matter-of-fact and in control.

06 Features

07 Content strategy & voice

08 Visual system & shared kit

Ink #15140f Accent / red #a32a18 Green #2f5a24 Amber #6f5210 Surface #f9f7f2

Type: IBM Plex Sans (UI + numerals), IBM Plex Mono (labels / data), Oswald (eyebrows + section headers). Off-white page, white cards, red as a sparing pop. Every screen is assembled from one shared kit so they stay identical:

Cards that pair copy with numbers use a horizontal rule between the two (working target, about-this-camp, how-you're-tracking, this-camp).

09 What's left — engine & integration

The screen designs are complete. The remaining work is wiring and back-end, plus two sign-off items tracked in sibling docs.

  1. Wire live recalculation — adaptive weekly goal + edit-plan target recompute, driving the screens that already exist.
  2. Back-end — accounts, payments, sync, and push-notification delivery (failure-state designs already done).
  3. Dynamic Type & accessibility implementation — see OnWeight - Accessibility Pass.md.
  4. Rules-data sign-off — all seven sports verified (Taekwondo +5% confirmed vs WT Competition Rules Art. 9 §2.2); only product-decision items remain (Boxing category names). See OnWeight - Rules Verification.md.
OnWeight HQ